package com.wcq.studentbackend.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@Slf4j
public class PasswordUtil {
    private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(10);


    /**
     * 加密密码
     * @param rawPassword 原始密码
     * @return 加密后的密码
     */
    public static String encode(String rawPassword) {
        String encoded = encoder.encode(rawPassword);
        log.debug("密码加密 - 原始密码: {}, 加密后: {}", rawPassword, encoded);
        return encoded;
    }

    /**
     * 验证密码是否匹配
     * @param rawPassword 原始密码
     * @param encodedPassword 加密后的密码
     * @return 是否匹配
     */
    public static boolean matches(String rawPassword, String encodedPassword) {
        boolean matches = encoder.matches(rawPassword, encodedPassword);
        log.debug("密码验证 - 原始密码: {}, 加密密码: {}, 匹配结果: {}", 
            rawPassword, encodedPassword, matches);
        return matches;
    }

    /**
     * 生成默认密码的加密值
     * @return 加密后的默认密码
     */
    public static String getDefaultEncodedPassword() {
        String defaultPassword = "password123";
        String encoded = encoder.encode(defaultPassword);
        log.debug("生成默认密码 - 原始密码: {}, 加密后: {}", defaultPassword, encoded);
        return encoded;
    }

    /**
     * 验证密码是否正确加密
     * @param encodedPassword 加密后的密码
     * @return 是否是正确的BCrypt格式
     */
    public static boolean isValidBCryptFormat(String encodedPassword) {
        boolean isValid = encodedPassword != null && 
            encodedPassword.startsWith("$2a$") && 
            encodedPassword.length() == 60;
        log.debug("验证密码格式 - 密码: {}, 长度: {}, 前缀: {}, 是否有效: {}", 
            encodedPassword,
            encodedPassword != null ? encodedPassword.length() : 0,
            encodedPassword != null ? encodedPassword.substring(0, Math.min(7, encodedPassword.length())) : "null",
            isValid);
        return isValid;
    }
} 